package de.hdu.pms.ctrl;

import java.util.Calendar;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import de.hdu.pms.dao.KrankheitDao;
import de.hdu.pms.dao.MitarbeiterDao;
import de.hdu.pms.model.Krankheit;
import de.hdu.pms.model.Mitarbeiter;

@Controller
public class KrankheitController {
	private static Logger Log = Logger.getLogger(KrankheitController.class);
	private KrankheitDao krankheitDao = null;
	private MitarbeiterDao mitarbeiterDao = null;
	private Krankheit krankheit = null;

	public MitarbeiterDao getMitarbeiterDao() {
		return mitarbeiterDao;
	}

	public void setMitarbeiterDao(MitarbeiterDao mitarbeiterDao) {
		this.mitarbeiterDao = mitarbeiterDao;
	}

	public void setKrankheit(Krankheit krankheit) {
		this.krankheit = krankheit;
	}

	public KrankheitDao getKrankheitDao() {
		return krankheitDao;
	}

	public void setKrankheitDao(KrankheitDao krankheitDao) {
		this.krankheitDao = krankheitDao;
	}

	public Krankheit getKrankheit() {
		return krankheit;
	}

	/**
	 * Function to create and edit Krankheit with the view "edit-krankheit".
	 * 
	 * @param id
	 * @return Viewname "edit-krankheit" selects the view
	 *         "/view/edit-krankheit.jsp"
	 * @author BBV
	 */

	@RequestMapping(value = "/EditKrankheit.html", method = RequestMethod.GET)
	public ModelAndView edit(@RequestParam(required = false) Integer id) {
		Log.debug("EditKrankheit.hmtl");
		ModelAndView mv = new ModelAndView();
		if (id == null) {
			Log.info("Krankheit id == null ");
			mv.addObject(new Krankheit());
			mv.addObject("check", true);

		} else {
			Log.info("Krankheit ID found!");
			mv.addObject(krankheitDao.findById(id));
			mv.addObject("check", false);
		}
		mv.addObject("title", "Krankheitstage bearbeiten");
		mv.addObject("message", "Tragen Sie die Krankheitstage ein");
		mv.addObject("mitarbeiter", mitarbeiterDao.findAll());
		mv.setViewName("edit-krankheit");
		return mv;
	}

	/**
	 * Function save Krankheit Excpected HTTP Post and request
	 * '/SaveKrankheit.html" redirects to '/Krankheit.html'
	 * 
	 * @param model
	 * @param m_id
	 * @param krankheit_von
	 * @param krankheit_bis
	 * @return redirect 'Krankheit.html'
	 * @author BBV
	 */

	@RequestMapping(value = "/SaveKrankheit.html", method = RequestMethod.POST)
	public String save(Model model, Integer m_id, Integer[] id,
			String krankheit_von, String krankheit_bis) {
		String[] k_von = krankheit_von.split("\\.");
		String[] k_bis = krankheit_bis.split("\\.");
		this.krankheit = new Krankheit();
		if (id != null) {
			this.krankheit.setId(id[0]);
		}
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.DATE, Integer.parseInt(k_von[0]));
		calendar.set(Calendar.MONTH, Integer.parseInt(k_von[1]) - 1);
		calendar.set(Calendar.YEAR, Integer.parseInt(k_von[2]));
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		this.krankheit.setKrankheit_von(calendar.getTime());
		calendar.set(Calendar.DATE, Integer.parseInt(k_bis[0]));
		calendar.set(Calendar.MONTH, Integer.parseInt(k_bis[1]) - 1);
		calendar.set(Calendar.YEAR, Integer.parseInt(k_bis[2]));
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		this.krankheit.setKrankheit_bis(calendar.getTime());
		krankheitDao.save(krankheit, m_id);
		model.addAttribute("statusMessagekey", "projekte.form.msg.success");
		return "redirect:Krankheit.html";
	}

	/**
	 * Function for all Krankheiten
	 * 
	 * @returns all Krankheiten
	 * @author BBV
	 */

	@RequestMapping(value = "/Krankheit.html", method = RequestMethod.GET)
	public ModelAndView findAll() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Krankheit");
		mv.addObject("message", "Verwaltung der Krankheitstage");
		mv.addObject("krankheit", krankheitDao.findAll());
		mv.setViewName("list-krankheit");
		return mv;
	}
	
	/**
	 * Function to delete a Krankheit
	 * redirects to 'Krankheit.html'
	 * @param krankheit
	 * @param m_id
	 * @return String
	 */

	@RequestMapping(value = "/DeleteKrankheit.html", method = RequestMethod.GET)
	public String delete(Krankheit krankheit, Integer m_id) {
		Mitarbeiter mit = new Mitarbeiter();
		mit = mitarbeiterDao.findById(m_id);
		krankheit.setMitarbeiter(mit);
		krankheitDao.delete(krankheit);
		return "redirect:Krankheit.html";

	}

}
